如何高调使用Python函数式编程

您所在的位置:网站首页 python 2的n次幂 如何高调使用Python函数式编程

如何高调使用Python函数式编程

2023-03-04 17:49| 来源: 网络整理| 查看: 265

如何高调使用Python函数式编程

首先我们考虑一个初学编程一般会了解的问题,计算n的阶乘,一个学过编程的程序猿可以简单的写出如下代码:

def fact(n): return n == and or n * fact(n - ) ret = fact() # ret = 120

这次我们的主角函数式编程,可以写出如下代码:

fact = (lambda highfunc: highfunc(highfunc))(lambda func: lambda n: n == and or n * func(func)(n - )) ret = fact() # ret = 120

如果不理解上面的代码,先来介绍一下基础的知识。 python 里面的匿名函数(lambda),在这里就不过多描述了,相信学过py的各位看官们应该比较熟悉他。 为了讲清楚这一点,我们首先来看一个例子,计算a的n次幂。我们很容易得到如下代码:

def make_power_fn(power): def power_fn(base): return base ** power return power_fn p3 = make_power_fn() print(p3()) # 1000

我们可以发现可以省略power_fn这个函数的名字,那样我们就可以得到下面的代码:

def make_power_fn(power): return lambda base: base ** power

更进一步的,我们可以得到如下代码:

make_power_fn = lambda power: lambda base: base ** power

理解了上述代码,我们现在可以讨论一开始提出的问题了,计算n的阶乘。

我们首先来实现递归,简单一点说,我们可以吧匿名函数作为参数传递下去,没听明白,我们来看一个简单的例子。

我们现在修改一下原始的计算阶乘的函数:

def fact(func, n): return n == and or n * func(func, n - )

然后我们把函数的定义取消掉。

fact = lambda func, n: n == and or n * func(func, n - ) print(fact(fact, )) # 120

现在看起来已经比较好了,但是还是有func的参数传递,我们想要直接调用fact(),也就是说我们需要把后面那个函数作为参数传递给前面,最终我们便得到了一开始的代码。 终于讲完了,小白一枚,大佬们看看就好了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3